# coding:utf-8
import torch  # 导入 PyTorch 库，用于深度学习模型训练与推理
import sys  # 导入 sys 模块，用于访问系统相关的功能（如路径等）


# print(sys.path)  # 打印当前 Python 的模块搜索路径（被注释掉了）

class ProjectConfig(object):  # 定义一个配置类 ProjectConfig，继承自 object 基类
    def __init__(self):  # 初始化方法，创建对象时自动调用
        # 设备设置：如果 CUDA 可用，则使用 GPU（cuda:0），否则使用 CPU
        self.device = 'cuda:0' if torch.cuda.is_available() else 'cpu'

        # 预训练模型路径：指定本地预训练模型的位置（中文 BERT 模型）
        self.pre_model = r'D:\bert-base-chinese'

        # 训练数据路径：指定训练集文件的位置
        self.train_path = r'D:\PET\data\train.txt'

        # 验证数据路径：指定验证集文件的位置
        self.dev_path = r'D:\PET\data\dev.txt'

        # 提示模板文件路径：指定 Prompt 模板文件的位置
        self.prompt_file = r'D:\PET\data\prompt.txt'

        # Verbalizer 文件路径：指定 Verbalizer 文件的位置
        self.verbalizer = r'D:\PET\data\verbalizer.txt'

        # 最大序列长度：限制输入序列的最大长度为 512（BERT 模型的最大长度限制）
        self.max_seq_len = 512

        # 批量大小：每次训练时使用的样本数量为 8
        self.batch_size = 8

        # 学习率：优化器的学习率为 5e-5（适合 BERT 微调的典型值）
        self.learning_rate = 5e-5

        # 权重衰减：L2 正则化系数，设置为 0 表示不启用正则化
        self.weight_decay = 0

        # Warmup 比例：学习率预热的比例为 6%
        self.warmup_ratio = 0.06

        # 最大标签长度：标签的最大长度为 2（可能用于分类任务中的标签编码）
        self.max_label_len = 2

        # 训练轮数：总共训练 2 轮（epochs）
        self.epochs = 2

        # 日志记录步数：每 10 步记录一次日志
        self.logging_steps = 10

        # 验证步数：每 20 步进行一次验证
        self.valid_steps = 20

        # 模型保存目录：指定模型检查点的保存路径
        self.save_dir = r'D:\PET\checkpoints'


if __name__ == '__main__':  # 程序入口，确保只有在直接运行该脚本时才会执行以下代码
    pc = ProjectConfig()  # 创建 ProjectConfig 类的实例
    print(pc.prompt_file)  # 打印 prompt_file 的路径，用于调试或确认配置
    print(pc.pre_model)  # 打印 pre_model 的路径，用于调试或确认配置

# 定义了一个名为 ProjectConfig 的配置类，用于集中管理深度学习项目的各种参数和路径。它通过动态选择设备（CPU或GPU）、设定文件路径（包括预训练模型、数据集及配置文件）、配置模型超参数（如最大序列长度、批量大小、学习率等）以及训练相关参数（如训练轮数、日志记录和验证频率），来支持模型的训练与评估过程。在程序入口处实例化该类并打印部分配置项以确认设置正确无误，体现了良好的配置管理和项目组织实践，适用于基于预训练模型的多种任务如文本分类、命名实体识别等。
